.TH CBS 8 "18 Sept 2017" "iproute2" "Linux"
.SH NAME
CBS \- Credit Based Shaper (CBS) Qdisc
.SH SYNOPSIS
.B tc qdisc ... dev
dev
.B parent
classid
.B [ handle
major:
.B ] cbs idleslope
idleslope
.B sendslope
sendslope
.B hicredit
hicredit
.B locredit
locredit
.B [ offload
0|1
.B ]

.SH DESCRIPTION
The CBS (Credit Based Shaper) qdisc implements the shaping algorithm
defined by the IEEE 802.1Q-2014 Section 8.6.8.2, which applies a well
defined rate limiting method to the traffic.

This queueing discipline is intended to be used by TSN (Time Sensitive
Networking) applications, the CBS parameters are derived directly by
what is described by the Annex L of the IEEE 802.1Q-2014
Specification. The algorithm and how it affects the latency are
detailed there.

CBS is meant to be installed under another qdisc that maps packet
flows to traffic classes, one example is
.BR mqprio(8).

.SH PARAMETERS
.TP
idleslope
Idleslope is the rate of credits that is accumulated (in kilobits per
second) when there is at least one packet waiting for transmission.
Packets are transmitted when the current value of credits is equal or
greater than zero. When there is no packet to be transmitted the
amount of credits is set to zero. This is the main tunable of the CBS
algorithm and represents the bandwidth that will be consumed.
Note that when calculating idleslope, the entire packet size must be
considered, including headers from all layers (i.e. MAC framing and any
overhead from the physical layer), as described by IEEE 802.1Q-2014
section 34.4.

As an example, for an ethernet frame carrying 284 bytes of payload,
and with no VLAN tags, you must add 14 bytes for the Ethernet headers,
4 bytes for the Frame check sequence (CRC), and 20 bytes for the L1
overhead: 12 bytes of interpacket gap, 7 bytes of preamble and 1 byte
of start of frame delimiter. That results in 322 bytes for the total
packet size, which is then used for calculating the idleslope.

.TP
sendslope
Sendslope is the rate of credits that is depleted (it should be a
negative number of kilobits per second) when a transmission is
occurring. It can be calculated as follows, (IEEE 802.1Q-2014 Section
8.6.8.2 item g):

sendslope = idleslope - port_transmit_rate

.TP
hicredit
Hicredit defines the maximum amount of credits (in bytes) that can be
accumulated. Hicredit depends on the characteristics of interfering
traffic, 'max_interference_size' is the maximum size of any burst of
traffic that can delay the transmission of a frame that is available
for transmission for this traffic class, (IEEE 802.1Q-2014 Annex L,
Equation L-3):

hicredit = max_interference_size * (idleslope / port_transmit_rate)

.TP
locredit
Locredit is the minimum amount of credits that can be reached. It is a
function of the traffic flowing through this qdisc (IEEE 802.1Q-2014
Annex L, Equation L-2):

locredit = max_frame_size * (sendslope / port_transmit_rate)

.TP
offload
When
.B offload
is 1,
.BR cbs(8)
will try to configure the network interface so the CBS algorithm runs
in the controller. The default is 0.

.SH EXAMPLES

CBS is used to enforce a Quality of Service by limiting the data rate
of a traffic class, to separate packets into traffic classes the user
may choose
.BR mqprio(8),
and configure it like this:

.EX
# tc qdisc add dev eth0 handle 100: parent root mqprio num_tc 3 \\
	map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 \\
	queues 1@0 1@1 2@2 \\
	hw 0
.EE
.P
To replace the current queuing disciple by CBS in the current queueing
discipline connected to traffic class number 0, issue:
.P
.EX
# tc qdisc replace dev eth0 parent 100:4 cbs \\
	locredit -1470 hicredit 30 sendslope -980000 idleslope 20000
.EE

These values are obtained from the following parameters, idleslope is
20mbit/s, the transmission rate is 1Gbit/s and the maximum interfering
frame size is 1500 bytes.

.SH AUTHORS
Vinicius Costa Gomes <vinicius.gomes@intel.com>
